"""
https://leetcode.cn/problems/set-matrix-zeroes/description/


73. 矩阵置零
已解答
中等
相关标签
相关企业
提示
给定一个 m x n 的矩阵，如果一个元素为 0 ，则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。

 

示例 1：


输入：matrix = [[1,1,1],[1,0,1],[1,1,1]]
输出：[[1,0,1],[0,0,0],[1,0,1]]
示例 2：


输入：matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
输出：[[0,0,0,0],[0,4,5,0],[0,3,1,0]]
 

提示：

m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-231 <= matrix[i][j] <= 231 - 1
 

进阶：

一个直观的解决方案是使用  O(mn) 的额外空间，但这并不是一个好的解决方案。
一个简单的改进方案是使用 O(m + n) 的额外空间，但这仍然不是最好的解决方案。
你能想出一个仅使用常量空间的解决方案吗？

"""

from typing import List


class Solution:
    def setZeroes(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.

        1. 遍历数组所有的0，记录对应行和列集合
        2. 对应行和列集合，均置0

        """

        rows=set()
        cols=set()

        h=len(matrix)
        w=len(matrix[0])

        for r in range(h):
            for c in range(w):
                if matrix[r][c] ==0:
                    rows.add(r)
                    cols.add(c)

        for r in range(h):
            for c in range(w):
                if r in rows or c in cols:
                    matrix[r][c] =0       



if __name__=='__main__':
    sol=Solution()
    matrix = [[1,1,1],[1,0,1],[1,1,1]]
    sol.setZeroes(matrix)
    print(matrix)
    pass